#ifndef SCORESHOW_H
#define SCORESHOW_H

#include <QWidget>
#include <QListWidget>
#include "datacontroller.h"
#include <QThread>
#include <QTableWidget>

namespace Ui {
class ScoreShow;
}

class ScoreShow : public QWidget
{
    Q_OBJECT

protected:
    bool eventFilter(QObject *obj, QEvent *event) override;
    void changeEvent(QEvent * event) override;
    void resizeEvent(QResizeEvent *event) override;


public:
    explicit ScoreShow(DataController* dc, QWidget *parent = nullptr);
    // 设置datacontroller
//    void setDataController(DataController* dc);

    ~ScoreShow();




private slots:
    void onChosenColoumSelect(const QString );
    void addItemUi(const QVector<QString>);
    // 主线程初始化表格列头部和左边下拉框
    void initShowTable(const QStringList fields);
    // 主线程初始化表格全部内容
    void initTableInfo(const QVector<QVector<QString>> info);
    // 列宽发生变化
    void onColumnWidthChanged(int logicalIndex, int oldSize, int newSize);
    // 当某一列头部被点击
    void onHeaderClicked(int logicalIndex);
    // 填充每个listwidget的内容
    void fillListWidgets(const QVector<QVector<QString>> infos);
    // 更新筛选条件，重新请求数据
    void refreshConditions(int state);

    void on_testBtn_clicked();

    void on_clearAllBtn_clicked();

    void on_backBtn_clicked();

signals:
    // ui信号
    void showHomePage();
    // 左侧下拉框选择
    void chooseNewField(const QString chosenField);

    // 发送给DataController的信号
    // 请求初始化数据库信号
    void initSql();
    // 请求所有字段信号
    void getAllField();
    // 请求所有记录信号
    void getAllInfo();
    // 请求字段内容信号
    void getFieldInfo(const QVector<QString> fieldList);
    // 请求字段和条件列表
    void getFieldInfoWithCondition(const QVector<QString> fieldList, const QVector<QVector<QString>> conditionList);

private:
    Ui::ScoreShow *ui;
    bool sortUpDown;
//    QListWidget* showItemBox;
    bool m_ItemBoxShowFlag;
    DataController * m_dc;
//    QThread * dcThread;
    // 用于维护每一列的listwidget对象
    QVector<QListWidget*> m_lwManager;
    // 用于维护每一列listwidget的可见性
    QMap<int, bool> m_visibleLWMap;


    // 用于维护当前滚动条偏移量
    int m_curScrollOffset;
    // 用于维护当前滚动条最大量
    int m_maxScrollOffset;

    // 信号注册部分
    void initConnection();
    // 初始化showtable的ui
    void initShowTableUI();
    // 初始化每个listwidget
    void initListWidgets();

    // 把收到的数据显示到table中
    void refreshTableInfo(const QVector<QVector<QString>> infos);
    // 更新当前显示列表
    void refreshVisibleLW();

};

#endif // SCORESHOW_H
